// 复用性不太好 
// 类型约束是 输入参数的类型和返回值类型一致
// 任何类型 类型参数 T
// function print(arg:string):string{
//     console.log(arg);
//     return arg;
// }
// 联合类型
// function print(arg:string | number):string | number{
//     console.log(arg)
//     return arg
// }
// function print(arg:any):any{
//     console.log(arg)
//     return arg
// }
// ts 减少 js的莫名其妙的bug
// const res:string=print('123')
// 类型可传参
// <>声明一个泛型 T 占位符，变量
// function print<T>(arg:T):T{
//     console.log(arg)
//     return arg 
// }

// const res:string=print<string>('123')
// const res1:number=print<number>(123)

// type interface 自定义类型
type Print=<T>(arg:T)=>T 
const printFn:Print=function print(arg){
    return arg 
}